package com.zwz.control;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zwz.bean.Title;
import com.zwz.control.util.R;
import com.zwz.service.TitleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/title")
public class TitleControl {

    @Autowired
    private TitleService titleService;

    /**
     * 接收get请求，从数据库中取出id对应的标题信息
     *
     * @param tid 标题信息id
     * @return
     */
    @GetMapping("/show/{tid}")
    public R getIdToShow(@PathVariable Integer tid) {
        return new R(true, titleService.getById(tid));
    }

    /**
     * 接收delete请求，删除对应id的标题信息
     *
     * @param tid
     * @return
     */
    @DeleteMapping("/delete/{tid}")
    public R delete(@PathVariable Integer tid) {
        boolean flag = titleService.deleteById(tid);
        return new R(flag, flag ? "删除成功" : "删除失败");
    }

    /**
     * 接收post请求，将传入的标题信息存入数据库
     *
     * @param title 标题信息
     * @return
     * @RequestBody 接收的数据为JSON数据
     */
    @PostMapping("/insert")
    public R save(@RequestBody Title title) {
        boolean flag = titleService.insert(title);
        return new R(flag, flag ? "添加成功" : "添加失败");
    }

    /**
     * 分页查询，接收get请求，
     *
     * @param currentPage 当前页码
     * @param pageSize    每页数据条数
     * @param title       标题信息，用于查询，可以为空，为空不拼接SQL语句
     * @return
     */
    @GetMapping("/page/{currentPage}/{pageSize}")
    public R getPage(@PathVariable int currentPage, @PathVariable int pageSize, Title title) {
        IPage<Title> page = titleService.getPage(currentPage, pageSize, title);
        // 如果当前页面值大于总页码值，那么重新执行查询操作，使用最大页码值作为当前页码值
        if (currentPage > page.getPages()) {
            page = titleService.getPage((int) page.getPages(), pageSize, title);
        }
        return new R(true, page);
    }

    /**
     * 接收更新请求，更新数据库中的数据
     *
     * @param title 从前端传入的JSON，需要使用@RequestBody
     * @return
     */
    @PutMapping("/update")
    public R updateInfo(@RequestBody Title title) {
        boolean flag = titleService.updateById(title);
        return new R(flag, flag ? "修改成功^_^" : "修改失败-_-!");
    }

    /**
     * 用于统计数据库中管理员信息总数
     *
     * @return
     */
    @GetMapping("/count")
    public R countAll() {
        int count = titleService.countAll();
        return new R(true, count);
    }

}
